package Pojo;

/** Classe de Históricos referentes a uma determinada Turma
*
* @author Ronan Lopes
* 
* */

import java.io.Serializable;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
        
@Entity
public class HistoricoTurma implements Serializable{
	/** Código do Histórico Turma */
	@Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	
	/** Número de faltas*/
	private int numeroDeFaltas;
	
	/** Nota do aluno em uma turma*/
	private double nota;
	
	/** Boolean indicando a aprovação ou não*/
	private boolean aprovado;
	
	/** Aluno ao qual Histórico Turma pertence*/
        @JoinColumn(name="ALUNO_ID",referencedColumnName="ID")
        @ManyToOne
	private Aluno aluno;
	
	/** Turma ao qual Histórico Turma pertence*/
        @JoinColumn(name="TURMA_ID",referencedColumnName="ID")
        @ManyToOne
	private Turma turma;

        /**
         * Construtor exigido pelos annotations
         */
        public HistoricoTurma() {
        }
        
	/**Construtor da classe sem relacionamento
	 * 
	 * @param id
	 * @param numeroDeFaltas
	 * @param nota
	 * @param aprovado
	 */
	public HistoricoTurma(int id,int numeroDeFaltas, double nota, boolean aprovado){
		this.setId(id);
		this.setNumeroDeFaltas(numeroDeFaltas);
		this.setNota(nota);
		this.setAprovado(aprovado);
	}
        
        /**Construtor da classe sem relacionamento sem id
	 * 
	 * @param id
	 * @param numeroDeFaltas
	 * @param nota
	 * @param aprovado
	 */
	public HistoricoTurma(int numeroDeFaltas, double nota, boolean aprovado){
		this.setNumeroDeFaltas(numeroDeFaltas);
		this.setNota(nota);
		this.setAprovado(aprovado);
	}
	
	/**Construtor da classe com relacionamento sem id
	 * @param numeroDeFaltas
	 * @param nota
	 * @param aprovado
	 * @param aluno
	 * @param turma
	 */
	public HistoricoTurma(int numeroDeFaltas, double nota, boolean aprovado, Aluno aluno,Turma turma){
		this(numeroDeFaltas,nota,aprovado);
		this.setAluno(aluno);
		this.setTurma(turma);
	}

	/**Getter de id
	 * 
	 * @return int com o id
	 */
	public Integer getId() {
		return id;
	}

	/**Setter de id
	 * 
	 * @param id
	 */
	public void setId(Integer id) {
		this.id = id;
	}

	/**Getter de Número de Faltas na Turma
	 * 
	 * @return int com o Número de Faltas
	 */
	public int getNumeroDeFaltas() {
		return numeroDeFaltas;
	}

	/**Setter de Número de Faltas
	 * 
	 * @param numeroDeFaltas
	 */
	public void setNumeroDeFaltas(int numeroDeFaltas) {
		this.numeroDeFaltas = numeroDeFaltas;
	}

	/**Getter de Nota na turma
	 * 
	 * @return double com a Nota
	 */
	public double getNota() {
		return nota;
	}

	/**Setter de Nota na turma
	 * 
	 * @param nota
	 */
	public void setNota(double nota) {
		this.nota = nota;
	}

	/**Função booleana para verficação de aprovação
	 * 
	 * @return boolean com aprovação/reprovação
	 */
	public boolean isAprovado() {
		return aprovado;
	}

	/**Setter de aprovação
	 * 
	 * @param aprovado
	 */
	public void setAprovado(boolean aprovado) {
		this.aprovado = aprovado;
	}

	/**Getter de aluno referente ao histórico
	 * 
	 * @return Aluno com o aluno em questão.
	 */
	public Aluno getAluno() {
		return aluno;
	}

	/**Setter de Aluno
	 * 
	 * @param aluno
	 */
	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	/**Getter de Turma do Histórico
	 * 
	 * @return Turma com a turma em questão.
	 */
	public Turma getTurma() {
		return turma;
	}

	/**Setter de Turma do Histórico
	 * 
	 * @param turma
	 */
	public void setTurma(Turma turma) {
		this.turma = turma;
	}
	
	/**Sobrescrita do método toString
	 * 
	 * @return String com dados da classe.
	 */
	@Override
	public String toString(){
		return(this.getId()+"\t"+this.getNumeroDeFaltas()+"\t"+this.getNota()+"\t"+this.isAprovado()+"\t"+this.getAluno().getId()+"\t"+this.getTurma().getId()+"\n");
	}
}
